home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / boot / czesc_2 / toolmanager / source / prefs / movewindow.c < prev    next >
C/C++ Source or Header  |  1993-05-15  |  3KB  |  115 lines

  1. /*
  2.  * movewindow.c  V2.1
  3.  *
  4.  * move window handling
  5.  *
  6.  * (c) 1990-1993 Stefan Becker
  7.  */
  8.  
  9. #include "ToolManagerConf.h"
  10.  
  11. /* Window data */
  12. struct Window *MoveWindowPtr=NULL; /* Window */
  13. static UWORD ww,wh;                /* Window size */
  14.  
  15. /* Gadget data */
  16. static struct IntuiText it={1,0,JAM2,INTERWIDTH,INTERHEIGHT/2,NULL,NULL,NULL};
  17. static struct Gadget g={NULL,0,0,0,0,GFLG_GADGHNONE|GFLG_LABELITEXT,
  18.                         GACT_IMMEDIATE,GTYP_SYSGADGET|GTYP_WDRAGGING,NULL,NULL,
  19.                         &it,0,NULL,0,NULL};
  20. static struct Window *GadWindow;
  21. static struct Gadget *XGad,*YGad;
  22. static ULONG OldX,OldY;
  23. ULONG MoveWindowOffX,MoveWindowOffY;
  24.  
  25. /* Init move window */
  26. void InitMoveWindow(UWORD left, UWORD fheight)
  27. {
  28.  struct DrawInfo *dri;
  29.  char *s=AppStrings[MSG_MOVEWIN_DRAG_GAD];
  30.  
  31.  /* Get screen draw info */
  32.  if (dri=GetScreenDrawInfo(PublicScreen)) {
  33.   /* Set pens for IntuiText */
  34.   it.FrontPen=dri->dri_Pens[TEXTPEN];
  35.   it.BackPen=dri->dri_Pens[BACKGROUNDPEN];
  36.  
  37.   FreeScreenDrawInfo(PublicScreen,dri);
  38.  }
  39.  
  40.  /* Set gadget text & text attr */
  41.  it.ITextFont=&ScreenTextAttr;
  42.  it.IText=s;
  43.  
  44.  /* Calculate drag gadget & window sizes */
  45.  ww=TextLength(&TmpRastPort,s,strlen(s))+2*INTERWIDTH;
  46.  wh=fheight;
  47.  g.Width=ww;
  48.  g.Height=wh;
  49. }
  50.  
  51. /* Open move window */
  52. void OpenMoveWindow(struct Window *w, struct Gadget *xgad,
  53.                                       struct Gadget *ygad)
  54. {
  55.  /* Read current position */
  56.  OldX=((struct StringInfo *) xgad->SpecialInfo)->LongInt+MoveWindowOffX;
  57.  OldY=((struct StringInfo *) ygad->SpecialInfo)->LongInt+MoveWindowOffY;
  58.  
  59.  if (MoveWindowPtr=OpenWindowTags(NULL,WA_Left,       OldX,
  60.                                        WA_Top,        OldY,
  61.                                        WA_Width,      ww,
  62.                                        WA_Height,     wh,
  63.                                        WA_AutoAdjust, TRUE,
  64.                                        WA_PubScreen,  PublicScreen,
  65.                                        WA_Flags,      WFLG_BORDERLESS|
  66.                                                       WFLG_RMBTRAP,
  67.                                        WA_Gadgets,    &g,
  68.                                        TAG_DONE)) {
  69.   /* Draw bevel box */
  70.   DrawBevelBox(MoveWindowPtr->RPort,0,0,ww,wh,GT_VisualInfo,ScreenVI,
  71.                                               TAG_DONE);
  72.  
  73.   /* Set window variables */
  74.   MoveWindowPtr->UserPort=IDCMPPort;
  75.   MoveWindowPtr->UserData=(BYTE *) HandleMoveWindowIDCMP;
  76.   ModifyIDCMP(MoveWindowPtr,IDCMP_INTUITICKS|IDCMP_INACTIVEWINDOW);
  77.   GadWindow=w;
  78.   XGad=xgad;
  79.   YGad=ygad;
  80.  }
  81. }
  82.  
  83. /* Close move window */
  84. void CloseMoveWindow(void)
  85. {
  86.  RemoveGList(MoveWindowPtr,&g,-1);
  87.  CloseWindowSafely(MoveWindowPtr);
  88.  MoveWindowPtr=NULL;
  89. }
  90.  
  91. /* Handle move window IDCMP events */
  92. void *HandleMoveWindowIDCMP(struct IntuiMessage *msg)
  93. {
  94.  ULONG val;
  95.  
  96.  /* Window moved in X? */
  97.  if ((val=MoveWindowPtr->LeftEdge)!=OldX) {
  98.   /* Yes, set new value */
  99.   OldX=val;
  100.   GT_SetGadgetAttrs(XGad,GadWindow,NULL,GTIN_Number,val-MoveWindowOffX,
  101.                                         TAG_DONE);
  102.  }
  103.  
  104.  /* Window moved in Y? */
  105.  if ((val=MoveWindowPtr->TopEdge)!=OldY) {
  106.   /* Yes, set new value */
  107.   OldY=val;
  108.   GT_SetGadgetAttrs(YGad,GadWindow,NULL,GTIN_Number,val-MoveWindowOffY,
  109.                                         TAG_DONE);
  110.  }
  111.  
  112.  /* All OK! */
  113.  return(NULL);
  114. }
  115.